home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 25 / AACD 25.iso / AACD / Magazine / Online / QMail / source / ip.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-04-15  |  1.4 KB  |  54 lines

  1. #include "fmt.h"
  2. #include "scan.h"
  3. #include "ip.h"
  4.  
  5. unsigned int ip_fmt(s,ip)
  6. char *s;
  7. struct ip_address *ip;
  8. {
  9.   unsigned int len;
  10.   unsigned int i;
  11.  
  12.   len = 0;
  13.   i = fmt_ulong(s,(unsigned long) ip->d[0]); len += i; if (s) s += i;
  14.   i = fmt_str(s,"."); len += i; if (s) s += i;
  15.   i = fmt_ulong(s,(unsigned long) ip->d[1]); len += i; if (s) s += i;
  16.   i = fmt_str(s,"."); len += i; if (s) s += i;
  17.   i = fmt_ulong(s,(unsigned long) ip->d[2]); len += i; if (s) s += i;
  18.   i = fmt_str(s,"."); len += i; if (s) s += i;
  19.   i = fmt_ulong(s,(unsigned long) ip->d[3]); len += i; if (s) s += i;
  20.   return len;
  21. }
  22.  
  23. unsigned int ip_scan(s,ip)
  24. char *s;
  25. struct ip_address *ip;
  26. {
  27.   unsigned int i;
  28.   unsigned int len;
  29.   unsigned long u;
  30.  
  31.   len = 0;
  32.   i = scan_ulong(s,&u); if (!i) return 0; ip->d[0] = u; s += i; len += i;
  33.   if (*s != '.') return 0; ++s; ++len;
  34.   i = scan_ulong(s,&u); if (!i) return 0; ip->d[1] = u; s += i; len += i;
  35.   if (*s != '.') return 0; ++s; ++len;
  36.   i = scan_ulong(s,&u); if (!i) return 0; ip->d[2] = u; s += i; len += i;
  37.   if (*s != '.') return 0; ++s; ++len;
  38.   i = scan_ulong(s,&u); if (!i) return 0; ip->d[3] = u; s += i; len += i;
  39.   return len;
  40. }
  41.  
  42. unsigned int ip_scanbracket(s,ip)
  43. char *s;
  44. struct ip_address *ip;
  45. {
  46.   unsigned int len;
  47.  
  48.   if (*s != '[') return 0;
  49.   len = ip_scan(s + 1,ip);
  50.   if (!len) return 0;
  51.   if (s[len + 1] != ']') return 0;
  52.   return len + 2;
  53. }
  54.